-- recover
-- create by cheny3
-- 回血策略

return {
    -- 判断
    canTrigger = function(args)
        -- 获取配置表
        local tactics = AutoFightM.getTacticsCfg()["recover"];
        if not tactics or not tactics["args"] then
            -- 没有配置
            return false;
        end

        -- 判断玩家当前是否有可以用的卷轴
        local ok = false;
        for _, classId in pairs(tactics["args"]) do
            local skillId = SpellM.query(classId, "cast_skill_id");
            local mp = SpellM.calcSpellCost(classId);
            if SpellM.canUseSpell(classId, -1) then
                -- 当前有可以用的
                ok = true;
                break;
            end
        end

        -- 可以施放治疗的道具
        local property = args["property"] or {};
        for _, classId in pairs(property) do
            if ItemM.getAmount(ME.user, classId) > 0 then
                -- 当前有可以用的
                ok = true;
                break;
            end
        end

        -- 限制百分比
        local percent = args["hp_percent"];
        -- 当前属性
        local curHp = ME.user:queryAttrib("hp");
        local maxHp = ME.user:queryAttrib("max_hp");

        -- 如果小于限制百分比血量，回血
        if curHp * 100 < maxHp * percent and ok then
            return true;
        end

        return false;
    end,

    -- 触发
    trigger = function(args)
        -- 获取配置表
        local tactics = AutoFightM.getTacticsCfg()["recover"];

        if not tactics or not tactics["args"] then
            return false;
        end

        -- 有无法恢复的状态,没有秘制药水不做治疗
        if #PropM.fetchProps(ME.user, "blood_poisoned") > 0 then
            if ItemM.getAmount(ME.user, 7251) > 0 then
                return DungeonActionM.go("use_property", 0, 7251);
            else
                return false;
            end
        end

        -- 可以施放治疗的道具，优先使用道具
        local property = args["property"] or {};
        for _, classId in pairs(property) do
            if ItemM.getAmount(ME.user, classId) > 0 then
                return DungeonActionM.go("use_property", 0);
            end
        end

        for _, classId in pairs(tactics["args"]) do
            local skillId = SpellM.query(classId, "cast_skill_id");
            -- 提前判断魔法值不足的情况，否则会一直提示
            if SpellM.calcSpellCost(classId) > ME.user:getMp() then
                return false;
            end

            if SpellM.canUseSpell(classId, -1)
                and DungeonActionM.go("use_spell", -1, classId) then
                -- 使用卷轴成功
                return true;
            end
        end

        return false;
    end,
};
